/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.process;

import com.camachosanchez.bean.*;
import com.camachosanchez.controler.jpa.CategoriasJpaController;
import com.camachosanchez.gui.RegistroMasivoNeumaticos;
import com.camachosanchez.util.Constantes;
import com.camachosanchez.util.JPAUtil;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.swing.JOptionPane;

/**
 *
 * @author Rolando
 */
public class HiloGuardarNeumaticos implements Runnable {

    private EntityManagerFactory emf = null;
    private boolean continuar;
    private Date fecha_registro;
    private Date fecha_compra;
    private int cantidad_neumáticos;
    private int numero_capas;
    private int garantia_dias;
    private int garantia_km;
    private double profundidad_minima;
    private double presion_minima;
    private float precio_unitario;
    private String numeroFactura;
    private MarcasNeumatico marca;
    private ModelosBandaNeumatico modelo;
    private TipoPiso tipo_piso;
    private Almacenes almacen;
    private EstadosNeumaticos estado;
    private DistribuidoresNeumaticos distribuidor;
    private FormasPago forma_pago;
    private RegistroMasivoNeumaticos contenedor;
    private EstadosMedicion estadoMedicion;
    private String[] codigos;

    public HiloGuardarNeumaticos(boolean continuar, Date fecha_registro, Date fecha_compra, int cantidad_neumáticos, int numero_capas, int garantia_dias, int garantia_km, double profundidad_minima, double presion_minima, float precio_unitario, String numeroFactura, MarcasNeumatico marca, ModelosBandaNeumatico modelo, TipoPiso tipo_piso, Almacenes almacen, EstadosNeumaticos estado, EstadosMedicion estadoMedicion, DistribuidoresNeumaticos distribuidor, FormasPago forma_pago, RegistroMasivoNeumaticos contenedor, String[] codigos) {
        this.continuar = continuar;
        this.fecha_registro = fecha_registro;
        this.fecha_compra = fecha_compra;
        this.cantidad_neumáticos = cantidad_neumáticos;
        this.numero_capas = numero_capas;
        this.garantia_dias = garantia_dias;
        this.garantia_km = garantia_km;
        this.profundidad_minima = profundidad_minima;
        this.presion_minima = presion_minima;
        this.precio_unitario = precio_unitario;
        this.numeroFactura = numeroFactura;
        this.marca = marca;
        this.modelo = modelo;
        this.tipo_piso = tipo_piso;
        this.almacen = almacen;
        this.estado = estado;
        this.estadoMedicion = estadoMedicion;
        this.distribuidor = distribuidor;
        this.forma_pago = forma_pago;
        this.contenedor = contenedor;
        this.codigos = codigos;
        this.emf = JPAUtil.getEntityManagerFactory();
    }

    @Override
    public void run() {
        EntityManager em = null;
        try {
            em = emf.createEntityManager();
            EntityTransaction tx = em.getTransaction();
            tx.begin();
            java.awt.EventQueue.invokeLater(new Runnable() {

                @Override
                public void run() {
                    contenedor.getBarraProgreso().setMinimum(0);
                    contenedor.getBarraProgreso().setMaximum(cantidad_neumáticos);
                }
            });

            for (int i = 0; i < cantidad_neumáticos; i++) {
                Neumaticos neumatico = new Neumaticos();
                neumatico.setCodigo(codigos[i]);
                neumatico.setNumSerie("0");
                neumatico.setNumFactura(numeroFactura);
                neumatico.setFechaRegistro(fecha_registro);
                neumatico.setFechaCompra(fecha_compra);
                neumatico.setPrecio(precio_unitario);
                neumatico.setGarantiaDias(garantia_dias);
                neumatico.setGarantiaKilometros(garantia_km);
                neumatico.setIdAlmacen(almacen);
                neumatico.setTipoPiso(tipo_piso);
                neumatico.setIdDistribuidor(distribuidor);
                CategoriasJpaController categorias = new CategoriasJpaController(null);
                neumatico.setIdCategoria(categorias.findCategoriasEntities().get(0));
                neumatico.setIdMarca(marca);
                neumatico.setIdFormaPago(forma_pago);
                neumatico.setIdUsuario(Constantes.currentUser);
                neumatico.setProfundidadMinima(profundidad_minima);
                neumatico.setNumCapas(numero_capas);
                neumatico.setPresionMinima(presion_minima);
                neumatico.setIdModelo(modelo);
                neumatico.setEstado(true);
                neumatico.setIdEstado(estado);
                neumatico.setFechaInsercionActualizacion(new Date());
                neumatico.setProfunidad(0d);
                neumatico.setNumRenovaciones(0);
                neumatico.setDistanciaRecorrida(0);
                neumatico.setNumDespinches(0);
                neumatico.setInfMontaje("");
                neumatico.setIdEstadoMedicion(estadoMedicion);
                em.persist(neumatico);
                final int value = i;
                java.awt.EventQueue.invokeLater(new Runnable() {

                    @Override
                    public void run() {

                        contenedor.getBarraProgreso().setValue(value);
                    }
                });

            }
            tx.commit();
            java.awt.EventQueue.invokeLater(new Runnable() {

                @Override
                public void run() {

                    contenedor.getBarraProgreso().setValue(contenedor.getBarraProgreso().getMaximum());
                    JOptionPane.showMessageDialog(contenedor, "La operación se ha realizado correctamente.");
                    contenedor.setVisible(false);
                    contenedor.dispose();
                }
            });

        } catch (Exception e) {
            em.getTransaction().rollback();
            e.printStackTrace();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }
}
